public class Test04 {
    public static void main1(String[] args) {
        String str = "";
        StringBuilder stringBuilder = new StringBuilder();
        int loopCount = 1_0000;
        //获取毫秒级别的时间戳
        long starTime = System.currentTimeMillis();
        for (int i = 0; i < loopCount; i++) {
//            str +=i ;//时间：325
            stringBuilder.append(i);//时间：3 时间大大的减少了
        }
        long endTime = System.currentTimeMillis();
        System.out.println("时间：" +(endTime-starTime));
    }

    public static void main(String[] args) {
        StringBuilder stringBuilder = new StringBuilder();
        //获取底层保存字符串空间总长度 stringBuilder 自带 16 字节的空间
        System.out.println(stringBuilder.capacity());//16
        //可以根据需要提前把容量设置好 ensureCapacity
        stringBuilder.ensureCapacity(19);
        System.out.println(stringBuilder.capacity());//34
        //StringBuilder 的扩容是自行内部完成的 如果你不手动设置 ， 内部也会自动在 capacity 不够用的时候触发扩容

        //手动设置就可以直接把内存提前申请好 ， 节省扩容次数

        //char setCharAt(int index); 获取 index 位置字符

        // void setCharAt(int index , char ch); 将index 位置内容设置为 ch
        StringBuilder stringBuilder1 = new StringBuilder("hello");
        stringBuilder1.setCharAt(2,'a');
        System.out.println(stringBuilder1.toString());

        //int indexOf(String str); int indexOf(String str , fromIndex);

        //StringBuff insert(int offset,String str ); 在 offset 位置插入八种基类型&String&Object类型数据

        stringBuilder1.insert(1,"xxx");//新插入的字符串开头位置 ， 就处于 offset 下标这里（在插入到下标之前）
        System.out.println(stringBuilder1.toString());

        //StringBuff deleteCharAt(int index); 删除 index 位置字符

        //StringBuff delete(int start , int end); 删除[start,end)区间的字符
        stringBuilder1.delete(1,3);
        System.out.println(stringBuilder1.toString());

        //StringBuff replace(int start , int end,String str) 将[start,end)区间的字符替换为 str
        stringBuilder1.replace(1,3,"ccc");
        System.out.println(stringBuilder1.toString());

        //String substring(int start) 从 start 到末尾 以 String 方式返回

        //String substring(int start , int end) , 将[start,end)区间的字符 以 String 方式返回

        //StringBuffer reverse() 反转字符串
        stringBuilder1.reverse();//修改对象自身
        System.out.println(stringBuilder1.toString());

        //String toString() 将所有字符按 String 方式返回

        //StringBuffer 各种用法和 StringBuilder 一样 ， 但是发提供了 synchronized 操作 ， 能够保证线程安全
    }
}
